from dataclasses import dataclass

# class Test:
#     def __init__(self, a, b):
#         self.a = a
#         self.b = b

@dataclass
class Test:
    a: int = 0
    b: int = 0


t = Test(b=5)
print(t)

@dataclass
class Point:
    """Точки"""
    x: int
    y: int

    def __str__(self):
        return f'Точка x: {self.x}  y: {self.y}'


def get_len_line(p1: Point, p2: Point):
    """Нахождение длины стороны по точкам"""
    a = abs(p1.x - p2.x)
    b = abs(p1.y - p2.y)
    return (a ** 2 + b ** 2) ** 0.5


@dataclass
class Vertexes:
    """Объекты с вершинами."""
    def get_area(self):
        """Площадь."""
        raise NotImplementedError


@dataclass
class Rectangle(Vertexes):
    """Прямоугольник."""
    point1: Point
    point2: Point

    def get_length(self):
        """Ширина."""
        return abs(self.point1.x - self.point2.x)

    def get_height(self):
        """Высота."""
        return abs(self.point1.y - self.point2.y)

    def get_area(self):
        """Площадь."""
        return self.get_height() * self.get_length()

    def __str__(self):
        return f'''Прямоугольник с точками
        {self.point1}
        {self.point2}
        '''


@dataclass
class Triangle(Vertexes):
    """Треугольник."""
    point1: Point
    point2: Point
    point3: Point

    def get_area(self):
        """Площадь."""
        # Дины сторон треугольника
        a = get_len_line(self.point1, self.point2)
        b = get_len_line(self.point2, self.point3)
        c = get_len_line(self.point3, self.point1)

        # Половина периметра
        p = (a + b + c) / 2

        # Площадь по формуле герона
        S = (p * (p - a) * (p - b) * (p - c)) ** 0.5
        return S


point1 = Point(1, 2)
point2 = Point(4, 4)
rectangle = Rectangle(point1, point2)
print(f'Длина прямоугольника: {rectangle.get_length()}')
print(f'Высота прямоугольника: {rectangle.get_height()}')
print(f'Площадь прямоугольника: {rectangle.get_area()}')

tr = Triangle(point1, point2, Point(6, 2))
print(f'Площадь треугольника: {tr.get_area()}')

print(rectangle)
